package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

import java.util.Arrays;

/**
 * 数据来源枚举
 *
 * 用于标识批阅统计数据的来源渠道，支持多种数据采集和输入方式
 *
 * @author System
 * @version 1.0.0
 */
public enum DataSource implements BaseEnum {

    /**
     * 系统自动 - 系统自动采集和计算的数据
     */
    SYSTEM("SYSTEM", "系统自动", "系统根据批阅操作自动采集和计算的统计数据"),

    /**
     * 手动输入 - 用户手动输入的数据
     */
    MANUAL("MANUAL", "手动输入", "用户通过界面手动录入的统计数据"),

    /**
     * API接口 - 通过外部API接口获取的数据
     */
    API("API", "API接口", "通过外部API接口获取或同步的统计数据"),

    /**
     * 数据导入 - 通过文件导入的数据
     */
    IMPORT("IMPORT", "数据导入", "通过Excel、CSV等文件导入的统计数据"),

    /**
     * 批处理 - 通过批处理任务生成的数据
     */
    BATCH("BATCH", "批处理", "通过定时批处理任务计算和生成的统计数据"),

    /**
     * 实时同步 - 实时同步的数据源
     */
    REAL_TIME("REAL_TIME", "实时同步", "通过实时数据流同步获取的统计数据");

    private final String code;
    private final String description;
    private final String detail;

    DataSource(String code, String description, String detail) {
        this.code = code;
        this.description = description;
        this.detail = detail;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 获取详细说明
     */
    public String getDetail() {
        return detail;
    }

    /**
     * 根据编码获取枚举
     */
    public static DataSource fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.code.equals(code))
                .findFirst()
                .orElse(null);
    }

    /**
     * 根据描述获取枚举
     */

    @Override
    public String toString() {
        return description;
    }
}